/*
 * Copyright 2010 Joshua Smith and Nelson Llewellyn
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package norse.util;

import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.transform.stream.StreamSource;
import norse.msg.MessageIF;

/**
 *
 */
//TODO: JavaDocs
public class MessageUnmarshaller
{
    public MessageUnmarshaller() throws JAXBException
    {
        JAXBContext context = JaxbContextGenerator.getContext();
        underlyingUnmarshaller = context.createUnmarshaller();
    }

    public MessageIF unmarshallMessage(String _messageXML) throws JAXBException
    {
        StringReader xmlReader = new StringReader(_messageXML);
        StreamSource xmlSource = new StreamSource(xmlReader);
        
        Object unmarshalledObj
                = underlyingUnmarshaller.unmarshal(xmlSource);

        if (!(unmarshalledObj instanceof MessageIF))
        {
            throw new JAXBException("Unmarshalled object of class \""
                    + unmarshalledObj.getClass().getName()
                    + "\"was not a Message.");
        }

        return (MessageIF)unmarshalledObj;
    }

    private Unmarshaller underlyingUnmarshaller;
}
